#include<bits/stdc++.h>
using namespace std;
int n,m,a,b;
long long x,y,z;
long long g[3006][3006],mini[3006][3006];
long long h[9000010];
long long sum;
int main(){
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>m>>a>>b;
cin>>h[0]>>x>>y>>z;
for(int i=1;i<=9000005;++i) h[i]=(h[i-1]*x+y)%z;
for(int i=1;i<=n;++i){
for(int j=1;j<=m;++j){
g[i][j]=h[(i-1)*m+j-1];
}
}
for(int i=1;i<=n;++i){
deque<int> dq;
for(int j=1;j<=m;++j){
while(!dq.empty()&&g[i][dq.back()]>=g[i][j]) dq.pop_back();
dq.push_back(j);
if(j>=b){
while(!dq.empty()&&dq.front()<=j-b) dq.pop_front();
mini[i][j-b+1]=g[i][dq.front()];
}
}
}
for(int i=1;i<=m-b+1;++i){
deque<int> dq;
for(int j=1;j<=n;++j){
while(!dq.empty()&&mini[dq.back()][i]>=mini[j][i]) dq.pop_back();
dq.push_back(j);
if(j>=a){
while(!dq.empty()&&dq.front()<=j-a) dq.pop_front();
sum+=mini[dq.front()][i];
}
}
}
cout<<sum;
return 0;
}
74. Search a 2D Matrix | 71. Simplify Path |
62. Unique Paths | 50. Pow(x, n) |
43. Multiply Strings | 34. Find First and Last Position of Element in Sorted Array |
33. Search in Rotated Sorted Array | 17. Letter Combinations of a Phone Number |
5. Longest Palindromic Substring | 3. Longest Substring Without Repeating Characters |
1312. Minimum Insertion Steps to Make a String Palindrome | 1092. Shortest Common Supersequence |
1044. Longest Duplicate Substring | 1032. Stream of Characters |
987. Vertical Order Traversal of a Binary Tree | 952. Largest Component Size by Common Factor |
212. Word Search II | 174. Dungeon Game |
127. Word Ladder | 123. Best Time to Buy and Sell Stock III |
85. Maximal Rectangle | 84. Largest Rectangle in Histogram |
60. Permutation Sequence | 42. Trapping Rain Water |
32. Longest Valid Parentheses | Cutting a material |
Bubble Sort | Number of triangles |
AND path in a binary tree | Factorial equations |